﻿using System;
using LM.InterfacesFabricas.Basicos.Enumeradores;
using LM.InterfacesFabricas.Utilidades;

namespace LM.Tela.Desktop
{

    using LM.InterfacesFabricas.DTOs;
    using LM.InterfacesFabricas.Fabricas;
    using LM.InterfacesFabricas.Interfaces.Servicos;
    using System.Collections.Generic;
    using System.Globalization;

    public partial class frmTelefone
    {
        public List<DtoTelefone> Telefones { get; set; }

        public frmCliente frmCliente;

        private frmGaragem frmGaragem;

        public frmTelefone(frmCliente frmCli)
        {
            InitializeComponent();
            BindTipoDeTelefone();
            frmCliente = frmCli;
        }

        public frmTelefone(frmGaragem frmGar)
        {
            InitializeComponent();
            BindTipoDeTelefone();
            frmGaragem = frmGar;
        }

        private void BindTipoDeTelefone()
        {
            cmbTipoDeTelefone.DataSource = Enum.GetValues(typeof (EnumTipoDeTelefone));
            cmbTipoDeTelefone.SelectedIndex = -1;
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (Telefones == null)
                Telefones = new List<DtoTelefone>();
            
            int codigo;
            int.TryParse(txtCodigo.Text, out codigo);
            int ddd = string.IsNullOrWhiteSpace(txtDdd.Text) ? 0 : Convert.ToInt32(txtDdd.Text);

            var tel = new DtoTelefone { Codigo = codigo, Numero = txtNumero.Text, Ddd = ddd, TipoDeTelefone = (EnumTipoDeTelefone)cmbTipoDeTelefone.SelectedItem };

            if (!EmEdicao())
            {
                Telefones.Add(tel);
            }
            else
            {
                if (grdTelefones.Rows.Count > 0)
                {
                    Telefones.RemoveAt(grdTelefones.SelectedRows[0].Index);
                    Telefones.Add(tel);
                }
            }

            PrepareTelaParaNovoRegistro();
        }

        private void LimpeCamposEdicao()
        {
            txtCodigo.Text = string.Empty;
            txtNumero.Text = string.Empty;
            txtDdd.Text = string.Empty;
            cmbTipoDeTelefone.SelectedIndex = -1;
        }

        public void CarregueItensJaCadastrados(List<DtoTelefone> tels)
        {
            grdTelefones.DataSource = null;
            grdTelefones.DataSource = tels;
        }

        private void frmTelefone_Load(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private void grdTelefones_CellDoubleClick(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                var tel = ((IList<DtoTelefone>)grdTelefones.DataSource)[e.RowIndex];

                txtCodigo.Text = tel.Codigo.ToString(CultureInfo.InvariantCulture);
                txtCodigo.Enabled = false;
                txtNumero.Text = tel.Numero.ToString();
                txtDdd.Text = tel.Ddd.ToString();
                cmbTipoDeTelefone.Text = tel.TipoDeTelefone.ToString();
            }
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private bool EmEdicao()
        {
            return !string.IsNullOrWhiteSpace(txtCodigo.Text) && txtCodigo.Enabled == false;
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            if (!EmEdicao())
            {
                this.ExibaInconsistencia("Telefone não selecionado para edição.");
            }
            else
            {
                //var servicoDeTelefone = FabricaGenerica.Crie<IServicoDeTelefone>();
                //servicoDeTelefone.Exclua(int.Parse(txtCodigo.Text));

                if (grdTelefones.Rows.Count > 0)
                {
                    Telefones.RemoveAt(grdTelefones.SelectedRows[0].Index);
                }

                PrepareTelaParaNovoRegistro();
            }
        }

        private void PrepareTelaParaNovoRegistro()
        {
            LimpeCamposEdicao();
            CarregueItensJaCadastrados(Telefones);
            txtCodigo.Enabled = true;
            txtCodigo.Focus();
        }

        private void frmTelefone_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
        {
            if (frmCliente != null)
            {
                frmCliente.cliente.Telefones = Telefones;
                frmCliente.MostraClienteNoFormulario();
            }

            if (frmGaragem != null)
            {
                frmGaragem.listaTelefones = Telefones;
            }
        }
        
    }
}
